let app = getApp();

Page({
  data: {
    url: '',
    user: null,
    goods: [
      {
        id: 1,
        name: "心理测评券",
        desc: "免费参与一次专业心理测评",
        points: 100,
        image: "/images/article14.jpg"
      },
      {
        id: 2,
        name: "咨询优惠券",
        desc: "心理咨询享8折优惠",
        points: 150,
        image: "/images/article12.jpg"
      },
      {
        id: 3,
        name: "冥想音频包",
        desc: "包含10节正念冥想音频",
        points: 200,
        image: "/images/article13.jpg"
      },
      {
        id: 4,
        name: "精美电子证书",
        desc: "完成课程可获得专属电子证书",
        points: 249,
        image: "/images/article11.jpg"
      }
    ]
  },

  // 兑换按钮点击
  onExchange(e) {
    const id = e.currentTarget.dataset.id;
    const good = this.data.goods.find(g => g.id === id); // 当前兑换的单个商品
    const user = this.data.user || { points: 0 };

    // 1. 未登录校验
    if (!user.id) { // 用user.id判断是否登录（更准确，避免空对象误判）
      wx.showToast({ title: '请先登录', icon: 'none' });
      return;
    }

    // 2. 积分不足校验
    if (good.points > user.points) {
      wx.showToast({ 
        title: '积分不足', 
        icon: 'none' 
      });
      return;
    }

    // 3. 计算兑换后的新积分（提前计算，避免重复运算）
    const newPoints = user.points - good.points;

    // 4. 确认兑换弹窗
    wx.showModal({
      title: '确认兑换',
      content: `确定使用 ${good.points} 积分兑换【${good.name}】吗？`,
      success: (res) => {
        if (res.confirm) {
          // 4.1 前端本地更新（原有逻辑保留）
          const newUser = { ...user, points: newPoints };
          wx.setStorageSync('user', newUser);
          this.setData({ user: newUser });

          // 更新商品禁用状态
          const updatedGoods = this.data.goods.map(item => ({
            ...item,
            isDisabled: item.points > newUser.points
          }));
          this.setData({ goods: updatedGoods });

          // 4.2 关键修复：在用户确认后才发请求（原代码在弹窗外，会提前发送）
          wx.request({
            url: this.data.url + 'User', // 建议后端接口路径更明确，如'/User/updatePoints'
            method: "PUT",
            data: {
              id: user.id, // 必传：后端更新用户积分需要的用户ID
              points: newPoints // 必传：兑换后的新积分（避免后端二次计算，减少误差）
            },
            success: (r) => {
              console.log("后端积分更新结果：", r);
              // 若后端返回失败，回滚前端积分（避免前后端数据不一致）
              if (r.data.code !== 200 && r.data.success !== true) { // 按后端实际返回格式调整
                wx.setStorageSync('user', user); // 回滚到原积分
                this.setData({ user });
                wx.showToast({ title: '兑换成功但积分同步失败', icon: 'none' });
              }
            },
            fail: (err) => {
              console.error("积分更新请求失败：", err);
              // 请求失败时回滚前端积分
              wx.setStorageSync('user', user);
              this.setData({ user });
              wx.showToast({ title: '网络错误，兑换失败', icon: 'none' });
            }
          });

          // 兑换成功提示（原有逻辑保留）
          wx.showToast({
            title: '兑换成功',
            icon: 'success'
          });
        }
      }
    });
  },

  onLoad(options) {
    this.setData({
      url: app.globalData.url
    });
    // 获取用户信息（原有逻辑保留）
    const user = wx.getStorageSync('user');
    this.setData({ user });
  },

  showNotEnoughPoints() {
    wx.showToast({ title: '积分不足', icon: 'none' });
  },

  onShow() {
    // 页面显示时同步用户积分和商品状态（原有逻辑保留）
    const user = wx.getStorageSync('user') || { points: 0 };
    const goods = this.data.goods.map(good => ({
      ...good,
      isDisabled: good.points > user.points
    }));
    this.setData({ user, goods });
  }
});